// 逻辑 正确，·但超时，
#include <bits/stdc++.h>
using namespace std;
#define int long long

signed main() {
  int n;
  cin >> n;
  map<int, int> mp;
  for (int i = 1; i <= n; i++) {
    int k;
    cin >> k;
    mp[k]++;
  }

  int same = 0;

  for (auto v : mp) {
    int k = v.second;
    if (k >= 3) {
      same += k * (k - 1) * (k - 2) / 6;
    }
  }
  // int d = mp.size();
  // int dd = d * (d - 1) * (d - 2) / 6; 求三者不同的组合数， 不对，细品

  // 计算三个数字都不同的组合数
  vector<int> diff;
  for (auto v : mp) {
    diff.push_back(v.second);
  }

  int d = 0;
  int k = diff.size();

  // 超时。
  // 使用三重循环计算三个不同数字的组合数
  for (int i = 0; i < k; i++) {
    for (int j = i + 1; j < k; j++) {
      for (int m = j + 1; m < k; m++) {
        d += diff[i] * diff[j] * diff[m];
      }
    }
  }

  // cout << same << " " << d << endl;
  cout << n * (n - 1) * (n - 2) / 6 - same - d << endl;
  // "恰好两个不同"的组合数

  // 用文氏图分析，

  return 0;
}